home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload Trio 2
/
Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO
/
dir42
/
ja94ex.zip
/
SEARCH.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1994-07-19
|
4KB
|
186 lines
*(SEARCH.CMD - Search and replace program)
CLS
CLEAR ALL VAR
SET ERROR VAR VsEvar
SET MESSAGES OFF
SET ERROR MESSAGES OFF
CLS
LABEL toploop
CLS FROM 3,42 TO 7,78 BLACK
CLS FROM 2,40 TO 6,77 CYAN
WRITE ' RB:Search' AT 3,52 YELLOW ON CYAN
WRITE ' Text Search and Replace Program.' +
AT 5,42 YELLOW ON CYAN
CHOOSE VsTblview FROM #TBLVIEWS AT 5 12
IF VsEvar <> 0 THEN
PAUSE 2 USING 'No tables or views available.'
GOTO alldone
ENDIF
IF VsTblview = '[Esc]' THEN
GOTO alldone
ENDIF
SET VAR VsTabid = sys_table_id FROM sys_tables +
WHERE sys_table_name = .VsTblview
SELECT COUNT(*) INTO VsEdiCols FROM sys_columns +
WHERE sys_table_id = .VsTabid AND +
(sys_data_type = 3 OR sys_data_type = 8)
IF VsEdiCols = 0 THEN
PAUSE 2 USING +
'This table has no Text or Note columns to modify.' +
AT CENTER,CENTER DEFAULT
GOTO toploop
ENDIF
CHOOSE VsColumn FROM #VALUES FOR sys_column_name +
FROM sys_columns WHERE sys_table_id = .VsTabid AND +
(sys_data_type = 3 OR sys_data_type = 8) CASCADE
IF VsColumn = '[Esc]' THEN
GOTO toploop
ENDIF
SET VAR VsColLen INT = sys_length FROM sys_columns +
WHERE sys_column_name = .VsColumn
IF VsColLen > 40 THEN
SET VAR VsColLen = 40
ENDIF
CLS FROM 10 12 TO 18 72 BLACK
CLS FROM 9 10 TO 17 71 GREEN
SET VAR VsOldString TEXT, VsNewString TEXT
WRITE 'Enter the old text string to search for.' +
AT 10 14 BLACK ON GREEN
FILLIN VsOldString = .VsColLen AT 11 14 YELLOW ON GREEN
IF VsOldString IS NULL THEN
GOTO toploop
ENDIF
WRITE 'Enter the new replacement string.' +
AT 12 14 BLACK ON GREEN
FILLIN VsNewString = .VsColLen AT 13 14 YELLOW ON GREEN
IF VsNewString IS NULL THEN
GOTO toploop
ENDIF
SNAP search.$$$ FROM 1,1 TO 25,80
SELECT COUNT(*) INTO VsNumRows FROM &VsTblview +
WHERE &VsColumn CONTAINS .VsOldString
IF VsNumRows = 0 THEN
PAUSE 2 USING 'No matching rows found.' +
AT CENTER,CENTER DEFAULT
GOTO toploop
ENDIF
WRITE 'ALL rows containing the old string +
will be replaced.' AT 15 14 RED ON GREEN
WRITE .VsNumRows, 'rows will be updated.' +
AT 16 24 RED ON GREEN
DIALOG 'Confirm each change?' +
VsConfirm, VsKey YES AT 19
IF VsConfirm = 'NO' THEN
DIALOG 'Continue with update of all rows?' +
VsOk VsEnd YES AT 19
IF VsOk = 'NO' THEN
GOTO alldone
ELSE
SET VAR VsUpdate = +
('UPDATE' & .VsTblview & 'SET' & .VsColumn + +
'=' + '(SRPL(' + .VsColumn + ',' + '''' + +
.VsOldString + '''' + ',' + '''' + .VsNewString + +
'''' + ',0))' & 'WHERE' & .VsColumn & + 'LIKE' & +
'''%' + .VsOldString + '%''')
&VsUpdate
CLS FROM 15 12 TO 17 68 GREEN
IF VsEvar = 0 THEN
WRITE 'Update successful,' .VsNumRows, +
'rows updated.' AT 16 14 RED ON GREEN
PAUSE 2
ELSE
WRITE 'Update did not complete.' +
AT 16 14 RED ON GREEN
PAUSE 2
ENDIF
ENDIF
ELSE
SET VAR VsErrCnt INT = 0, VsUpdCnt INT = 0, +
VsOld TEXT, VsNew TEXT
SET VAR VsWhereString = ('%'+.VsOldString+'%')
DROP CURSOR c1
DECLARE c1 CURSOR FOR SELECT &VsColumn +
FROM &VsTblview +
WHERE &VsColumn LIKE .VsWhereString
OPEN c1
FETCH c1 INTO VsOld VsInd1
WHILE SQLCODE <> 100 THEN
SET VAR VsNew = +
(SRPL(.VsOld,.VsOldString,.VsNewString,0))
CLS FROM 16 9 TO 19 73 BLACK
CLS FROM 15 8 TO 18 72 CYAN
WRITE 'Old row value: ', .VsOld AT 16 10 +
BLACK ON CYAN
WRITE 'New row value: ', .VsNew AT 17 10 +
RED ON CYAN
DIALOG 'Change this row?' VsOk VsEnd YES AT 19
IF VsOk = 'yes' THEN
UPDATE &VsTblview SET &VsColumn = .VsNew +
WHERE CURRENT OF c1
IF VsEvar <> 0 THEN
SET VAR VsErrCnt = -1
ELSE
SET VAR VsUpdCnt = (.VsUpdCnt + 1)
ENDIF
ENDIF
FETCH c1 INTO VsOld VsInd1
ENDWHILE
DROP CURSOR c1
DISPLAY search.$$$ AT 1
IF VsErrCnt >= 0 THEN
SET VAR VsMsg = +
( 'Update successful,' & CTXT(.VsUpdCnt) & +
'rows updated.' )
PAUSE 2 USING .VsMsg AT 16 DEFAULT
ELSE
PAUSE 2 USING 'Update did not complete.' +
AT 16 DEFAULT
ENDIF
ENDIF
CLS
*(reset)
LABEL alldone
CLEAR VAR Vs%
SET ERROR VAR OFF
CLS
SET MESSAGES ON
SET ERROR MESSAGES ON
RETURN